#ifndef __gpio_H
#define __gpio_H

#include "gd32f30x.h"
#include "gd32f30x_libopt.h"

#define LED_Pin         GPIO_PIN_12
#define LED_GPIO_Port   GPIOB
#define LED_BLINK()     gpio_bit_toggle(LED_GPIO_Port,LED_Pin)

#define USART0_EN_PORT  GPIOB
#define USART0_EN_PIN   GPIO_PIN_11

#define HAL_GPIO_ReadPin(gpio_periph, pin)                   gpio_input_bit_get(gpio_periph, pin)
#define HAL_GPIO_WritePin(gpio_periph, pin, bit_value)       gpio_bit_write(gpio_periph, pin, bit_value)

#define USART_EN_IN     gpio_bit_reset(USART0_EN_PORT, USART0_EN_PIN)
#define USART_EN_OUT    gpio_bit_set(USART0_EN_PORT, USART0_EN_PIN)

#define X_AT_HOME_PORT  GPIOB
#define X_AT_HOME_PIN   GPIO_PIN_4
#define Y_AT_HOME_PORT  GPIOC
#define Y_AT_HOME_PIN   GPIO_PIN_14
#define Z_AT_HOME_PORT  GPIOA
#define Z_AT_HOME_PIN   GPIO_PIN_15
#define M_AT_HOME_PORT  GPIOC
#define M_AT_HOME_PIN   GPIO_PIN_13

#define X_DIR_PORT      GPIOB
#define X_DIR_PIN       GPIO_PIN_5
#define Y_DIR_PORT      GPIOB
#define Y_DIR_PIN       GPIO_PIN_1
#define Z_DIR_PORT      GPIOA
#define Z_DIR_PIN       GPIO_PIN_4
#define M_DIR_PORT      GPIOC
#define M_DIR_PIN       GPIO_PIN_15

#define X_EN_PORT       GPIOB
#define X_EN_PIN        GPIO_PIN_9
#define Y_EN_PORT       GPIOB
#define Y_EN_PIN        GPIO_PIN_10
#define Z_EN_PORT       GPIOB
#define Z_EN_PIN        GPIO_PIN_0
#define M_EN_PORT       GPIOA
#define M_EN_PIN        GPIO_PIN_3

#define X_LOCK_PORT     GPIOB
#define X_LOCK_PIN      GPIO_PIN_6
#define Y_LOCK_PORT     GPIOB
#define Y_LOCK_PIN      GPIO_PIN_2
#define Z_LOCK_PORT     GPIOA
#define Z_LOCK_PIN      GPIO_PIN_5
#define M_LOCK_PORT     GPIOA
#define M_LOCK_PIN      GPIO_PIN_0

#define ZHOD_PORT       GPIOB
#define ZHOD_PIN        GPIO_PIN_3
#define ZLIM_PORT       GPIOB
#define ZLIM_PIN        GPIO_PIN_15


void gpio_bit_toggle(uint32_t gpio_periph, uint32_t pin);
void MX_GPIO_Init(void);

#endif

